﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ucb.Workshop.Business;
using Ucb.Workshop.Business.Util;
using Ucb.Workshop.Model;
using Ucb.Workshop.WinApp.View.GestionProducto;
using Ucb.Workshop.WinApp.View.GestionProveedor;
using Ucb.Workshop.Dal;

namespace Ucb.Workshop.WinApp.View.GestionPedido
{
    public partial class ControlPedido : UserControl
    {
        ProviderManager proveedor;
        string[] valores;
        float total = 0;

        public float Total
        {
            get { return total; }
            set { total = value; }
        }


        public string[] Valores
        {
            get { return valores; }
            set { valores = value; }
        }

        public ProviderManager Proveedor
        {
            get { return proveedor; }
            set
            {
                if (gridDetallePedido.RowCount > 0)
                    this.actualizarEmpresaGridDetallePedido(value);
                proveedor = value;
            }
        }
        Producto producto;

        public Producto Producto
        {
            get { return producto; }
            set { producto = value; }
        }

        Provee provee;

        public Provee Provee
        {
            get { return provee; }
            set { provee = value; }
        }

        public ControlPedido()
        {
            producto = null;
            proveedor = null;
            provee = null;
            valores = null;
            InitializeComponent();
            gridDetallePedido.Columns.Add("COD_PROVEE", "cod_producto");//0
            gridDetallePedido.Columns["COD_PROVEE"].Visible = false;
            gridDetallePedido.Columns.Add("PRODUCTO", "Producto");//1
            gridDetallePedido.Columns.Add("CANTIDAD", "Cantidad");//2
            gridDetallePedido.Columns.Add("PRECIO", "precio");//3
            gridDetallePedido.Columns.Add("TOTAL", "Total");//
        }

        private void lbTitulo_Click(object sender, EventArgs e)
        {

        }

        private void btnBuscarEmpresa_Click(object sender, EventArgs e)
        {
         SelectorProveedor selProveedor = new SelectorProveedor(this);
         selProveedor.Show();
        }

        private void btnBuscarProducto_Click(object sender, EventArgs e)
        {
         SelectorProducto selProd = new SelectorProducto(this);//this
         selProd.Show();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
        if (!esDetalle())
        {
             if (UtilControl.ValidarTextBoxEntero(txtCantidad) && proveedor != null)
             {
                 int cantidad = UtilControl.Numero;
                 total = total + (cantidad * float.Parse(valores[3]));
                lbTotal.Text = total.ToString();
                string[] fila = { valores[0], valores[2], cantidad.ToString(), valores[3], (cantidad * float.Parse(valores[3])).ToString() };
                gridDetallePedido.Rows.Add(fila);
                 //actualizar();
                 txtProducto.Text = "";
                 txtCantidad.Text = "";
                 valores = null;
             }
         }
        else
            MessageBox.Show("Ya existe el producto en el detalle!!!");
        }
        public string datoGrid(int fila, int columna)
        {
            return gridDetallePedido.Rows[fila].Cells[columna].Value.ToString();
        }

       // Metodo que devuelve la lista del detalle pedido con el codigo del pedido registrado
       public ArrayList listaDetallePedido()
       {
        ArrayList lista = new ArrayList();
        for (int i = 0; i < (gridDetallePedido.RowCount) - 1; i++)
        {
            DetallePedido detalle_pedido = new DetallePedido();
            detalle_pedido.CodProvee = int.Parse(datoGrid(i, 0));
            detalle_pedido.Cantidad = int.Parse(datoGrid(i, 2));

           lista.Add(detalle_pedido);
        }
        return lista;
       }

     // Metodo que devuelve la lista del detalle pedido con el codigo del pedido registrado
     public ArrayList listaDetalleCompra()
     {
         ArrayList lista = new ArrayList();
         for (int i = 0; i < (gridDetallePedido.RowCount) - 1; i++)
         {
             DetalleCompra detalle_compra = new DetalleCompra();
             detalle_compra.CodProvee = int.Parse(datoGrid(i, 0));
            detalle_compra.Cantidad = int.Parse(datoGrid(i, 2));

            lista.Add(detalle_compra);
       }
    
         return lista;
     }

        /**
         * Metodo que cambia de Empresa (Proveedor) de acuerdo a la seleccion
         * que se ah realizado
         **/
        public void actualizarEmpresaGridDetallePedido(ProviderManager proveedorSeleccionado)
        {
            for (int i = 0; i < (gridDetallePedido.RowCount) - 1; i++)
            {
                gridDetallePedido.Rows[i].Cells[2].Value = proveedorSeleccionado.Cod_proveedor;
                gridDetallePedido.Rows[i].Cells[3].Value = proveedorSeleccionado.Empresa;
            }
        }

        public void insertarCompra()
        {
            int cod_pedido = 32132;
            DBManager conexion = new DBManager();
            Compras compra = new Compras();
            compra.CodPedido = cod_pedido;
            compra.Fecha = DateTime.Parse(txtFecha.Text);
            compra.Total = total;
            compra.Estado = "COMPRA_DEUDA";

            compra.Insertar();

            int cod = compra.ComprasCod();
            cod_compra = cod;

             //registramos su detalle
            foreach (DetalleCompra detalle_compra in listaDetalleCompra())
            {
               detalle_compra.CodCompra = cod;
                detalle_compra.Insertar();
            }
            MessageBox.Show("Compra registrada!!!");

        }

        int cod_compra;

        private void txtCantidad_TextChanged(object sender, EventArgs e)
        {
            UtilControl.EsEntero(txtCantidad);
        }

        public void setTitulo(string titulo)
        {
            lbTitulo.Text = titulo;
        }
        public void actualizar()
        {
            if (valores != null)
                txtProducto.Text = valores[2];
            if (proveedor != null)
            {
                txtEmpresa.Text = proveedor.Empresa;
                btnBuscarEmpresa.Enabled = false;
                btnBuscarProducto.Enabled = true;
            }
        }
        public void limpiar()
        {
            btnBuscarEmpresa.Enabled = true;
            txtEmpresa.Text = "";
            gridDetallePedido.Rows.Clear();
        }

        public bool esDetalle()
        {
            bool existe = false;

            for (int i = 0; i < gridDetallePedido.Rows.Count - 1; i++)
            {
                string esProducto = gridDetallePedido.Rows[i].Cells[1].Value.ToString();

                if (txtProducto.Text.Trim().Equals(esProducto.Trim()))
                {
                    existe = true;
                    break;
                }
            }

            return existe;
        }

        public void registrarCredito(float monto)
        {
            Credito credito = new Credito();
            credito.CodCompra = cod_compra;
            credito.Fecha = DateTime.Parse(txtFecha.Text);
            credito.Monto = monto;

            credito.Insertar();
        }

        private void btnBuscarProducto_Click_1(object sender, EventArgs e)
        {
            SelectorProdProv selProd = new SelectorProdProv(this, Proveedor.Cod_proveedor);//this
            selProd.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // verificamos si los datos necesarios fueron llenados
            if (gridDetallePedido.RowCount > 0)
            {
                Pedidoo pedido = new Pedidoo();
                Pedidoo pedid = new Pedidoo();
                pedido.Fecha = DateTime.Now;
                //pedido.Codigo = controlPedido1.txtCodigo.Text;
                // Verificamos si el codigo existe
               // if (!pedid.existeCodigo())
               // {
                    pedid.Insertar();

                    //registrarDetallePedido(pedido.cod_pedido());

                    this.Visible = false;
                    this.Dispose();
               // }
               // else
                 //   MessageBox.Show("El codigo existe!!!\nCambie el Codigo");
            }
            else
            {
                MessageBox.Show("Debe llenar debidamente el pedido");
            }

        }
        
    }
}
